package com.hugui.stock.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSON;
import com.hugui.stock.entity.StockMarket;

/**
 * 股票数据文件保存工具类
 */
public class StockDataFileUtil {
    
    private static final Logger logger = LoggerFactory.getLogger(StockDataFileUtil.class);
    
    private static final String DATA_DIR = "D:\\Professional\\StockDate";
    
    /**
     * 保存股票数据到本地文件
     * @param stockCode 股票代码
     * @param stockMarketList 股票数据列表
     * @return 是否保存成功
     */
    public static boolean saveStockDataToFile(String stockCode, List<StockMarket> stockMarketList) {
        if (stockMarketList == null || stockMarketList.isEmpty()) {
            logger.warn("股票{}数据为空，不保存文件", stockCode);
            return false;
        }
        
        try {
            // 确保目录存在
            File dir = new File(DATA_DIR);
            if (!dir.exists()) {
                dir.mkdirs();
            }
            
            // 创建文件
            File file = new File(DATA_DIR, stockCode + ".txt");
            
            // 将数据转换为JSON格式保存
            String jsonData = JSON.toJSONString(stockMarketList);
            
            try (FileWriter writer = new FileWriter(file)) {
                writer.write(jsonData);
                writer.flush();
            }
            
            logger.info("股票{}数据已保存到文件: {}", stockCode, file.getAbsolutePath());
            return true;
            
        } catch (IOException e) {
            logger.error("保存股票{}数据到文件失败: {}", stockCode, e.getMessage(), e);
            return false;
        }
    }
    
    /**
     * 从本地文件读取股票数据
     * @param stockCode 股票代码
     * @return 股票数据列表
     */
    public static List<StockMarket> loadStockDataFromFile(String stockCode) {
        try {
            File file = new File(DATA_DIR, stockCode + ".txt");
            if (!file.exists()) {
                logger.warn("股票{}数据文件不存在: {}", stockCode, file.getAbsolutePath());
                return null;
            }
            
            // 读取文件内容
            String content = new String(Files.readAllBytes(Paths.get(file.getAbsolutePath())));
            
            // 解析JSON数据
            List<StockMarket> stockMarketList = JSON.parseArray(content, StockMarket.class);
            
            logger.info("从文件加载股票{}数据成功，共{}条记录", stockCode, stockMarketList.size());
            return stockMarketList;
            
        } catch (Exception e) {
            logger.error("从文件加载股票{}数据失败: {}", stockCode, e.getMessage(), e);
            return null;
        }
    }
    
    /**
     * 检查股票数据文件是否存在
     * @param stockCode 股票代码
     * @return 是否存在
     */
    public static boolean isStockDataFileExists(String stockCode) {
        File file = new File(DATA_DIR, stockCode + ".txt");
        return file.exists();
    }
    
    /**
     * 删除股票数据文件
     * @param stockCode 股票代码
     * @return 是否删除成功
     */
    public static boolean deleteStockDataFile(String stockCode) {
        try {
            File file = new File(DATA_DIR, stockCode + ".txt");
            if (file.exists()) {
                boolean deleted = file.delete();
                if (deleted) {
                    logger.info("删除股票{}数据文件成功", stockCode);
                }
                return deleted;
            }
            return true;
        } catch (Exception e) {
            logger.error("删除股票{}数据文件失败: {}", stockCode, e.getMessage(), e);
            return false;
        }
    }
    
    /**
     * 获取数据目录路径
     * @return 数据目录路径
     */
    public static String getDataDir() {
        return DATA_DIR;
    }
} 